package net.wangds.utils;

import net.wangds.iocomp.helper.ReadFileHelper;
import net.wangds.iocomp.helper.WriteFileHelper;

import java.io.File;

/**
 * 下载工具.
 */
public final class DownloadUtils {

    /**
     * 异步下载文件.
     * @param url 文件url.
     * @param out 输出文件.
     * @param onFinish 下载结束并且写入文件的通知回调函数.
     */
    public static void asyncDownload2File(String url, File out, Runnable onFinish){
        HttpUtils.asyncHttpSimpleDownload(url, null, (is)->{
            byte[] buf = ReadFileHelper.readInputStream(is);
            WriteFileHelper.write2File(buf, out, false);
            if(onFinish!=null){
                onFinish.run();
            }
        });
    }

    /**
     * 同步下载.
     * <p>实际上是在异步下载的方法上加了等待，下载仍然是一个okhttp3的异步下载过程。</p>
     * @param url 文件url。
     * @param out 输出文件。
     */
    public static void syncDownload2File(String url, File out){
        Object lock = new Object();

        asyncDownload2File(url, out, ()->{
            synchronized (lock){
                lock.notify();
            }
        });

        synchronized (lock){
            try {
                lock.wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }

    }

}
